/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.datos;

import com.perutaxi.entidades.eClienteServicio;
import com.perutaxi.entidades.eEmpresaTaxista;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author PeruTaxi
 */
public class dClienteServicio implements Serializable {

    public static eClienteServicio inicializar() {
        eClienteServicio clieServicio = new eClienteServicio();
        clieServicio.setTaxista(new eEmpresaTaxista());
        clieServicio.setOrigen("");
        clieServicio.setDestino("");
        clieServicio.setComentario("");
        clieServicio.setCosto(BigDecimal.ZERO);
        clieServicio.setCantPasajero(0L);

        return clieServicio;
    }

    public static eClienteServicio obtenerPorId(Long id) throws Exception {
        eClienteServicio clieServicio = new eClienteServicio();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_SERVICIO WHERE ID = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                clieServicio.setId(rs.getLong(1));
                clieServicio.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                clieServicio.setTaxista(dEmpresaTaxista.obtenerPorId(rs.getLong(3)));
                clieServicio.setFechaServicio(rs.getTimestamp(4));
                clieServicio.setOrigen(rs.getString(5));
                clieServicio.setDestino(rs.getString(6));
                clieServicio.setComentario(rs.getString(7));
                clieServicio.setCosto(rs.getBigDecimal(8));
                clieServicio.setCantPasajero(rs.getLong(9));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return clieServicio;
    }

    public static List<eClienteServicio> obtenerPorIdCliente(Long id) throws Exception {
        List<eClienteServicio> lista = new ArrayList<eClienteServicio>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_SERVICIO WHERE CLIENTE = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eClienteServicio clieServicio = new eClienteServicio();
                clieServicio.setId(rs.getLong(1));
                clieServicio.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                clieServicio.setTaxista(dEmpresaTaxista.obtenerPorId(rs.getLong(3)));
                clieServicio.setFechaServicio(rs.getTimestamp(4));
                clieServicio.setOrigen(rs.getString(5));
                clieServicio.setDestino(rs.getString(6));
                clieServicio.setComentario(rs.getString(7));
                clieServicio.setCosto(rs.getBigDecimal(8));
                clieServicio.setCantPasajero(rs.getLong(9));
                lista.add(clieServicio);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eClienteServicio> obtenerMisUltimosServicios(Long id) throws Exception {
        List<eClienteServicio> lista = new ArrayList<eClienteServicio>();
        int cont = 0;
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_SERVICIO WHERE CLIENTE = " + id + " ORDER BY ID DESC";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                cont++;
                if (cont <= 5) {
                    eClienteServicio clieServicio = new eClienteServicio();
                    clieServicio.setId(rs.getLong(1));
                    clieServicio.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                    clieServicio.setTaxista(dEmpresaTaxista.obtenerPorId(rs.getLong(3)));
                    clieServicio.setFechaServicio(rs.getTimestamp(4));
                    clieServicio.setOrigen(rs.getString(5));
                    clieServicio.setDestino(rs.getString(6));
                    clieServicio.setComentario(rs.getString(7));
                    clieServicio.setCosto(rs.getBigDecimal(8));
                    clieServicio.setCantPasajero(rs.getLong(9));
                    lista.add(clieServicio);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eClienteServicio> obtenerServiciosDelAnio(String ini, String fin, Long id) throws Exception {
        List<eClienteServicio> lista = new ArrayList<eClienteServicio>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_SERVICIO WHERE CLIENTE = " + id;
        query += " AND FECHA_SERVICIO BETWEEN '" + ini + "' AND '" + fin + "'";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eClienteServicio clieServicio = new eClienteServicio();
                clieServicio.setId(rs.getLong(1));
                clieServicio.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                clieServicio.setTaxista(dEmpresaTaxista.obtenerPorId(rs.getLong(3)));
                clieServicio.setFechaServicio(rs.getTimestamp(4));
                clieServicio.setOrigen(rs.getString(5));
                clieServicio.setDestino(rs.getString(6));
                clieServicio.setComentario(rs.getString(7));
                clieServicio.setCosto(rs.getBigDecimal(8));
                clieServicio.setCantPasajero(rs.getLong(9));
                lista.add(clieServicio);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eClienteServicio> obtenerTodos() throws Exception {
        List<eClienteServicio> lista = new ArrayList<eClienteServicio>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_SERVICIO";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eClienteServicio clieServicio = new eClienteServicio();
                clieServicio.setId(rs.getLong(1));
                clieServicio.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                clieServicio.setTaxista(dEmpresaTaxista.obtenerPorId(rs.getLong(3)));
                clieServicio.setFechaServicio(rs.getTimestamp(4));
                clieServicio.setOrigen(rs.getString(5));
                clieServicio.setDestino(rs.getString(6));
                clieServicio.setComentario(rs.getString(7));
                clieServicio.setCosto(rs.getBigDecimal(8));
                clieServicio.setCantPasajero(rs.getLong(9));
                lista.add(clieServicio);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static boolean guardar(eClienteServicio clieServicio) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "INSERT INTO CLIENTE_SERVICIO VALUES (?,?,?,?,?,?,?,?,?)";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, clieServicio.getId());
            ps.setLong(2, clieServicio.getCliente().getId());
            ps.setLong(3, clieServicio.getTaxista().getId());
            ps.setTimestamp(4, clieServicio.getFechaServicio());
            ps.setString(5, clieServicio.getOrigen().toUpperCase());
            ps.setString(6, clieServicio.getDestino().toUpperCase());
            ps.setString(7, clieServicio.getComentario().toUpperCase());
            ps.setBigDecimal(8, clieServicio.getCosto());
            ps.setLong(9, clieServicio.getCantPasajero());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }

    public static boolean actualizar(eClienteServicio clieServicio) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "UPDATE CLIENTE_SERVICIO SET CLIENTE = ?, TAXISTA = ?, FECHA_SERVICIO = ?, ORIGEN = ?, DESTINO = ?, COMENTARIO = ?, ";
        query += "COSTO = ?, CANT_PASAJERO = ? WHERE ID = ?";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, clieServicio.getCliente().getId());
            ps.setLong(2, clieServicio.getTaxista().getId());
            ps.setTimestamp(3, clieServicio.getFechaServicio());
            ps.setString(4, clieServicio.getOrigen().toUpperCase());
            ps.setString(5, clieServicio.getDestino().toUpperCase());
            ps.setString(6, clieServicio.getComentario().toUpperCase());
            ps.setBigDecimal(7, clieServicio.getCosto());
            ps.setLong(8, clieServicio.getCantPasajero());
            ps.setLong(9, clieServicio.getId());
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }
}